# import libraries
library(readxl)
library(tidyverse)
library(patchwork)

# global options
knitr::opts_chunk$set(fig.width=10, fig.height=8, fig.align = "center") 

# import data
opinary <- read_excel("../data/Publisher political orientation polls.xlsx", sheet = "Data") %>%
  mutate(label = ifelse(vote_position=="left",leftlabel,rightlabel),
         label = ifelse(vote_position=="middle","",label),
         label_order = ifelse(vote_position=="left",1,2),
         label_order = ifelse(vote_position=="right",3,label_order)
         ) %>%
  select(-leftlabel, -rightlabel) %>%
  group_by(poll_id) %>%
  # get number of total votes/poll
  mutate(vote_sum = sum(votes)) %>%
  ungroup() %>%
  # keep polls with > 1000 votes
  filter(vote_sum > 1000) %>%
  mutate(vote_share = votes/vote_sum)

Number of total votes

p <- opinary %>% 
  group_by(poll_customer_id) %>%
  summarise(vote_sum = sum(votes)) %>%
  ggplot(aes(reorder(poll_customer_id, vote_sum), vote_sum, text = vote_sum)) +
  geom_col(fill="darkred", alpha=0.7) +
  coord_flip() +
  ggthemes::theme_hc() +
  labs(x=NULL, y="Total votes") +
  ylim(0, 3800000)

plotly::ggplotly(p, tooltip = c("text"))

Topics

check_polls <- function(df, topics) {
  
  df %>% 
    # Add filter
    filter(grepl(topics, header, ignore.case = T)) %>%
    group_by(header, label) %>%
    tally() %>%
    htmlTable::htmlTable(align="l", rnames=F)
}
plot_polls <- function(df, topics, pos_labels, neg_labels) {
  
  topic_df <- df %>%
    # Add filter
    filter(grepl(topics, header, ignore.case = T)) %>%
    group_by(poll_customer_id, header, label) %>%
    summarise(
      votes = sum(votes),
      vote_share = mean(vote_share)
      ) %>%
    ungroup() %>%
    group_by(poll_customer_id) %>%
    mutate(vote_sum = sum(votes)) %>% 
    ungroup() %>%
    # create labels
    mutate(
      short_label = ifelse(grepl(pos_labels, label, ignore.case = T),"+",""),
      short_label = ifelse(grepl(neg_labels, label, ignore.case = T),"-",short_label),
      long_label = paste(label,"(",votes,")")
      ) %>%
    group_by(poll_customer_id, header, short_label) %>%
    summarise(
      vote_share = mean(vote_share),
      vote_mean = sum(votes),
      labels = paste(long_label, collapse = "\n")
      ) %>% ungroup() %>%
    mutate(
      label_order = ifelse(short_label =="+",0,1),
      label_order = ifelse(short_label =="" ,1,label_order),
      label_order = ifelse(short_label =="-",2,label_order)
      )
  
  p <- topic_df %>%
    ggplot(aes(reorder(short_label,label_order), 
               poll_customer_id, fill=vote_share, text = labels
               )) +
    geom_tile() +
    geom_text(aes(label= round(vote_share,2)), size=3) +
    ggthemes::theme_hc() +
    facet_wrap(.~header, ncol = 2, scales = "free") +
    scale_fill_gradient2(low = "#6993c9", mid="#fcf8f7", high="#8b312e") +
    labs(x=NULL, y=NULL) +
    theme(axis.text.x = element_text(size = 6),
          legend.position='none')
  
  plotly::ggplotly(p, tooltip = c("text"))
  
}

1. National

AfD

key = "afd"

check_polls(opinary, key)
header label n
Glauben Sie, dass die AfD eine Gefahr für die Demokratie ist? 4
Glauben Sie, dass die AfD eine Gefahr für die Demokratie ist? Ja, die Partei wird gefährlich 4
Glauben Sie, dass die AfD eine Gefahr für die Demokratie ist? Nein, die AfD ist ungefährlich 4
Ist Ihnen die AfD zu radikal? 5
Ist Ihnen die AfD zu radikal? Ja, ihre Thesen sind mir zu extrem 5
Ist Ihnen die AfD zu radikal? Nein, die AfD vertritt eine angemessene Politik 5
Sollte die AfD vom Verfassungsschutz beobachtet werden? 13
Sollte die AfD vom Verfassungsschutz beobachtet werden? Ja 1
Sollte die AfD vom Verfassungsschutz beobachtet werden? Ja, auf jeden Fall 1
Sollte die AfD vom Verfassungsschutz beobachtet werden? Ja, das ist notwendig 2
Sollte die AfD vom Verfassungsschutz beobachtet werden? Ja, die AfD ist Teil der rechtsextremen Szene 2
Sollte die AfD vom Verfassungsschutz beobachtet werden? Ja, die AfD ist Teil der rechtsextremen Szene. 2
Sollte die AfD vom Verfassungsschutz beobachtet werden? Ja, die Aussagen von Höcke und Co. sind nicht tragbar 1
Sollte die AfD vom Verfassungsschutz beobachtet werden? Ja, die Partei vertritt verfassungsfeindliche Positionen 3
Sollte die AfD vom Verfassungsschutz beobachtet werden? Ja, es gibt verfassungsfeindliche Tendenzen in der Partei. 1
Sollte die AfD vom Verfassungsschutz beobachtet werden? Nein 1
Sollte die AfD vom Verfassungsschutz beobachtet werden? Nein, auf keinen Fall 1
Sollte die AfD vom Verfassungsschutz beobachtet werden? Nein, das wäre übertrieben 2
Sollte die AfD vom Verfassungsschutz beobachtet werden? Nein, die Aufregung ist völlig überzogen 1
Sollte die AfD vom Verfassungsschutz beobachtet werden? Nein, eine Beobachtung durch den Geheimdienst ist nicht gerechtfertigt 3
Sollte die AfD vom Verfassungsschutz beobachtet werden? Nein, eine solche Beobachtung ist nicht gerechtfertigt 2
Sollte die AfD vom Verfassungsschutz beobachtet werden? Nein, eine solche Beobachtung ist nicht gerechtfertigt. 2
Sollte die AfD vom Verfassungsschutz beobachtet werden? Nein, sie ist eine demokratische Partei. 1
Wie bewerten Sie die Arbeit der AfD-Parlamentarier? 10
Wie bewerten Sie die Arbeit der AfD-Parlamentarier? Gut, sie bereichern die politische Debatte 10
Wie bewerten Sie die Arbeit der AfD-Parlamentarier? Schlecht, sie leisten keinen konstruktiven Beitrag 10
Wird die AfD die Bundespolitik nachhaltig verändern? 13
Wird die AfD die Bundespolitik nachhaltig verändern? Ja, die Partei wird einen sehr starken Einfluss auf die Politik haben 13
Wird die AfD die Bundespolitik nachhaltig verändern? Nein, die Partei wird im parlamentarischen Prozess untergehen 13
pos <- paste("Ja","Gut", sep="|")
neg <- paste("Nein", "Schlecht", sep="|")

plot_polls(opinary, key, pos, neg)

Islam, Rechtsextremismus, Antisemitismus

keys = paste("islam","rechtsextrem", "antisemitismus", sep ="|")

check_polls(opinary, keys)
header label n
Bedroht der Rechtsextremismus unsere Demokratie? 3
Bedroht der Rechtsextremismus unsere Demokratie? Ja, rechtsextremistische Parolen schränken unsere Freiheit ein 1
Bedroht der Rechtsextremismus unsere Demokratie? Ja, rechtsextremistische Parolen schränken unsere Freiheit ein. 2
Bedroht der Rechtsextremismus unsere Demokratie? Nein, unsere Demokratie hält das aus 1
Bedroht der Rechtsextremismus unsere Demokratie? Nein, unsere Demokratie hält das aus. 2
Braucht es mehr Aufklärung, um Antisemitismus vorzubeugen? 8
Braucht es mehr Aufklärung, um Antisemitismus vorzubeugen? Ja klar, das würde definitiv helfen. 1
Braucht es mehr Aufklärung, um Antisemitismus vorzubeugen? Ja, das würde helfen 7
Braucht es mehr Aufklärung, um Antisemitismus vorzubeugen? Nein, das allein hilft nicht. 1
Braucht es mehr Aufklärung, um Antisemitismus vorzubeugen? Nein, das hilft nicht 7
Gehört der Islam zu Deutschland? 12
Gehört der Islam zu Deutschland? Ja 1
Gehört der Islam zu Deutschland? Ja, er gehört dazu – genauso wie das Christentum auch 6
Gehört der Islam zu Deutschland? Ja, er gehört dazu – wie das Christentum auch 5
Gehört der Islam zu Deutschland? Nein 1
Gehört der Islam zu Deutschland? Nein, der Islam gehört nicht zu Deutschland 11
Glauben Sie, dass Antisemitismus in Deutschland ein Problem ist? 6
Glauben Sie, dass Antisemitismus in Deutschland ein Problem ist? Ja, den Eindruck habe ich 1
Glauben Sie, dass Antisemitismus in Deutschland ein Problem ist? Ja, Judenhass ist weit verbeitet 5
Glauben Sie, dass Antisemitismus in Deutschland ein Problem ist? Nein, damit gibt es hier eigentlich kaum Probleme 5
Glauben Sie, dass Antisemitismus in Deutschland ein Problem ist? Nein, ich glaube nicht, dass es so ist 1
pos <- "Ja" 
neg <- "Nein"

plot_polls(opinary, keys, pos, neg)

CDU, Koalition

keys = paste("merkel","koalition", sep ="|")

check_polls(opinary, keys)
header label n
Sollte es wieder eine große Koalition geben? 8
Sollte es wieder eine große Koalition geben? Ja, das ist das einzige stabile politische Bündnis 8
Sollte es wieder eine große Koalition geben? Nein, das wäre nicht die richtige Regierungskoalition 8
Wäre Friedrich Merz ein guter Merkel-Nachfolger? 16
Wäre Friedrich Merz ein guter Merkel-Nachfolger? Ja, er wäre eine gute Wahl 16
Wäre Friedrich Merz ein guter Merkel-Nachfolger? Nein, er wäre eine schlechte Wahl 16
Wird die große Koalition an der Migrationspolitik zerbrechen? 7
Wird die große Koalition an der Migrationspolitik zerbrechen? Ja, die Parteien sind zu gespalten 7
Wird die große Koalition an der Migrationspolitik zerbrechen? Nein, so weit wird es nicht kommen 7
pos <- "Ja" 
neg <- "Nein"

plot_polls(opinary, keys, pos, neg)

Cannabis, Alkohol

keys = paste("cannabis","alkohol", sep ="|")

check_polls(opinary, keys)
header label n
Sollte Cannabis grundsätzlich legalisiert werden? 17
Sollte Cannabis grundsätzlich legalisiert werden? Ja, eine Legalisierung ist längst überfällig 17
Sollte Cannabis grundsätzlich legalisiert werden? Nein, Cannabis ist als Einstiegsdroge zu gefährlich 17
Wird in Deutschland zu viel Alkohol getrunken? 11
Wird in Deutschland zu viel Alkohol getrunken? Ja, es wird zu oft und zu viel getrunken? 11
Wird in Deutschland zu viel Alkohol getrunken? Nein, die meisten trinken verantwortungsvoll 11
pos <- "Ja" 
neg <- "Nein"

plot_polls(opinary, keys, pos, neg)

Diesel-Fahrverbote, E-Mobilität, Klimawandel, …

keys <- paste("diesel","e-mobilität", "klimawandel", "cannabis", sep ="|")

check_polls(opinary, keys)
header label n
Brauchen wir mehr Investitionen in die E-Mobilität? 4
Brauchen wir mehr Investitionen in die E-Mobilität? Ja, das ist der Weg in die Zukunft 4
Brauchen wir mehr Investitionen in die E-Mobilität? Nein, der Markt regelt das von allein 4
Glauben Sie, dass die Menschheit den Klimawandel noch aufhalten kann? 4
Glauben Sie, dass die Menschheit den Klimawandel noch aufhalten kann? Ja, wir müssen aber anfangen, Probleme ernsthaft zu bekämpfen 4
Glauben Sie, dass die Menschheit den Klimawandel noch aufhalten kann? Nein, dafür ist es bereits zu spät 4
Sind Diesel-Fahrverbote sinnvoll? 10
Sind Diesel-Fahrverbote sinnvoll? Ja, die Luftverschmutzung ist sonst nicht in den Griff zu kriegen 10
Sind Diesel-Fahrverbote sinnvoll? Nein, das ist der Falsche Weg zur Lösung der Luftbelastung 10
Sollte Cannabis grundsätzlich legalisiert werden? 17
Sollte Cannabis grundsätzlich legalisiert werden? Ja, eine Legalisierung ist längst überfällig 17
Sollte Cannabis grundsätzlich legalisiert werden? Nein, Cannabis ist als Einstiegsdroge zu gefährlich 17
Was halten Sie von Diesel-Fahrverboten? 10
Was halten Sie von Diesel-Fahrverboten? Gut, dass etwas getan wird. 1
Was halten Sie von Diesel-Fahrverboten? Ich bin dagegen – weil sie reine Show sind. 1
Was halten Sie von Diesel-Fahrverboten? Ich bin dagegen. Diesel-Fahrer haben das Nachsehen 9
Was halten Sie von Diesel-Fahrverboten? Ich finde das gut. Das wird die Luftqualität verbessern 2
Was halten Sie von Diesel-Fahrverboten? Ich finde das gut. Das wird wird die Luftqualität verbessern 7
pos <- paste("Ja","Gut", sep="|")
neg <- paste("Nein", "Dagegen", sep="|")

plot_polls(opinary, keys, pos, neg)

Gehalt, Warnstreiks

keys = paste("gehalt", "warnstreiks", sep ="|")

check_polls(opinary, keys)
header label n
Haben Sie Verständnis für die Warnstreiks bei der Deutschen Bahn? 11
Haben Sie Verständnis für die Warnstreiks bei der Deutschen Bahn? Ja, die Streiks sind berechtigt. 11
Haben Sie Verständnis für die Warnstreiks bei der Deutschen Bahn? Nein, das geht eindeutig zu weit. 11
Sind Sie mit Ihrem Gehalt zufrieden? 7
Sind Sie mit Ihrem Gehalt zufrieden? Ja, absolut. Ich habe mehr als genug. 1
Sind Sie mit Ihrem Gehalt zufrieden? Ja, ich verdiene genug 4
Sind Sie mit Ihrem Gehalt zufrieden? Ja, mein Gehalt ist angemessen 1
Sind Sie mit Ihrem Gehalt zufrieden? Ja, total. Ich kann mich nicht beklagen. 1
Sind Sie mit Ihrem Gehalt zufrieden? Nein, ich fühle mich komplett unterbezahlt. 1
Sind Sie mit Ihrem Gehalt zufrieden? Nein, ich verdiene zu wenig 4
Sind Sie mit Ihrem Gehalt zufrieden? Nein, mein Gehalt könnte höher sein 1
Sind Sie mit Ihrem Gehalt zufrieden? Nein, überhaupt nicht. Ich bin komplett unterbezahlt. 1
pos <- "Ja" 
neg <- "Nein"

plot_polls(opinary, keys, pos, neg)

2. International

Trump

key <- "trump"

check_polls(opinary, key)
header label n
Glauben Sie, dass Trump seine Amtszeit vollenden wird? 6
Glauben Sie, dass Trump seine Amtszeit vollenden wird? Ja, er wird die vier Jahre im Amt bleiben 6
Glauben Sie, dass Trump seine Amtszeit vollenden wird? Nein, es wird jetzt schon eng für ihn 6
Ist Donald Trump eine Bedrohung für die Demokratie? 9
Ist Donald Trump eine Bedrohung für die Demokratie? Ja, er könnte zu einer großen Gefahr werden 9
Ist Donald Trump eine Bedrohung für die Demokratie? Nein, die Verfassung wird ihn in die Schranken weisen 9
Kann Trump die Wiederwahl 2020 gewinnen? 4
Kann Trump die Wiederwahl 2020 gewinnen? Ja, seine Chancen stehen gut 4
Kann Trump die Wiederwahl 2020 gewinnen? Nein, er hat keine Chance 4
Sind die USA unter Trump noch ein verlässlicher Partner? 12
Sind die USA unter Trump noch ein verlässlicher Partner? Ja, die USA bleiben ein wichtiger Verbündeter 12
Sind die USA unter Trump noch ein verlässlicher Partner? Nein, mit Trumps USA ist keine stabile Partnerschaft möglich 12
Was halten Sie von US-Präsident Donald Trump? 6
Was halten Sie von US-Präsident Donald Trump? Gar nichts, er wird mit seinen Vorhaben kläglich scheitern 6
Was halten Sie von US-Präsident Donald Trump? Viel, er wird die USA wieder in die Spur bringen 6
Wird Trump seine erste Amtszeit als Präsident überstehen? 12
Wird Trump seine erste Amtszeit als Präsident überstehen? Ja, er wird sogar wiedergewählt werden 12
Wird Trump seine erste Amtszeit als Präsident überstehen? Nein, er wird vorher abtreten müssen 12
pos <- paste("Ja","Viel", sep="|")
neg <- paste("Nein", "Gar nichts", sep="|")

plot_polls(opinary, key, pos, neg)

Brexit

key <- "brexit"

check_polls(opinary, key)
header label n
War der Brexit die richtige Entscheidung der Briten? 6
War der Brexit die richtige Entscheidung der Briten? Ja, sie brauchen die EU nicht 6
War der Brexit die richtige Entscheidung der Briten? Nein, sie sind auf die EU angewiesen 6
Wird es noch zu einem Exit vom Brexit kommen? 11
Wird es noch zu einem Exit vom Brexit kommen? Ja, der Brexit ist noch nicht in trockenen Tüchern 11
Wird es noch zu einem Exit vom Brexit kommen? Nein, der Austritt ist beschlossene Sache 11
Wird es zum harten Brexit kommen? 10
Wird es zum harten Brexit kommen? Ja, die Alternativen sind aufgebraucht 1
Wird es zum harten Brexit kommen? Ja, es wird am Ende keine Einigung bestehen 6
Wird es zum harten Brexit kommen? Ja, es wird keine Einigung geben 3
Wird es zum harten Brexit kommen? Nein, am Ende wird ein Deal stehen 6
Wird es zum harten Brexit kommen? Nein, am Ende wird ein Kompromiss stehen 3
Wird es zum harten Brexit kommen? Nein, es wird noch einen Kompromiss geben 1
pos <- "Ja"
neg <- "Nein"

plot_polls(opinary, key, pos, neg)

Nato, Türkei, Syrien

keys <- paste("nato","türkei", "tuerkei", "syrien", sep ="|")

check_polls(opinary, keys)
header label n
Hat die NATO eine Zukunft? 8
Hat die NATO eine Zukunft? Ja, das Verteidigungsbündnis ist nach wie vor wichtig 8
Hat die NATO eine Zukunft? Nein, die NATO hat sich überlebt 8
Ist der Rückzug aus Syrien die richtige Entscheidung? 7
Ist der Rückzug aus Syrien die richtige Entscheidung? Ja, das wurde langsam Zeit. 7
Ist der Rückzug aus Syrien die richtige Entscheidung? Nein, jetzt droht eine humanitäre Katastrophe. 7
Ist die Türkei unter Erdogan noch ein verlässlicher Partner? 14
Ist die Türkei unter Erdogan noch ein verlässlicher Partner? Ja, die Türkei bleibt ein wichtiger Verbündeter 14
Ist die Türkei unter Erdogan noch ein verlässlicher Partner? Nein, mit ihr ist keine stabile Partnerschaft möglich 14
Ist es gut, dass Deutschland Rüstungsexporte in die Türkei gestoppt hat? 4
Ist es gut, dass Deutschland Rüstungsexporte in die Türkei gestoppt hat? Ja, es nicht abzusehen, gegen wen die Waffen eingesetzt werden 4
Ist es gut, dass Deutschland Rüstungsexporte in die Türkei gestoppt hat? Nein, die Türkei sollte als NATO-Partner unterstützt werden 4
Würden Sie jetzt noch Urlaub in der Türkei machen? 9
Würden Sie jetzt noch Urlaub in der Türkei machen? Ja, die Politik hat darauf keinen Einfluss 9
Würden Sie jetzt noch Urlaub in der Türkei machen? Nein, die Lage ist mir zu heikel 9
pos <- "Ja"
neg <- "Nein"

plot_polls(opinary, keys, pos, neg)

EU

keys <- paste("notre","asyl", sep ="|")

check_polls(opinary, keys)
header label n
Glauben Sie an eine europäische Lösung im Asyl-Streit? 9
Glauben Sie an eine europäische Lösung im Asyl-Streit? Ja, eine andere als eine europäische Lösung kann es gar nicht geben 9
Glauben Sie an eine europäische Lösung im Asyl-Streit? Nein, zuerst müssen sich CDU und CSU einigen 9
Sollte Deutschland sich am Wiederaufbau der Notre-Dame beteiligen? 6
Sollte Deutschland sich am Wiederaufbau der Notre-Dame beteiligen? Ja, den Wiederaufbau sollten die Europäer gemeinsam angehen 6
Sollte Deutschland sich am Wiederaufbau der Notre-Dame beteiligen? Nein, die französischen Experten sind dafür am besten geeignet 6
pos <- "Ja"
neg <- "Nein"

plot_polls(opinary, keys, pos, neg)